//! 数据网关脚本解析器
//! 
//! 基于nom解析器组合子实现的自定义脚本语言解析器，支持：
//! - SQL查询语句
//! - 变量声明和赋值
//! - 函数调用
//! - 条件语句和循环
//! - 数据处理表达式

pub mod ast;
pub mod lexer;
pub mod parser;
pub mod executor;
pub mod error;
pub mod context;

// 重新导出核心类型
pub use ast::{Statement, Expression, Value, Program};
pub use parser::{ScriptParser, ParseResult};
pub use executor::{ScriptExecutor, ExecutionResult};
pub use error::{ParseError, ExecutionError, Result};
pub use context::{ScriptContext, Variable};

/// 解析器版本
pub const PARSER_VERSION: &str = env!("CARGO_PKG_VERSION");

/// 解析脚本
pub fn parse_script(input: &str) -> Result<Program> {
    let mut parser = ScriptParser::new();
    parser.parse(input)
}

/// 执行脚本
pub async fn execute_script(
    program: Program,
    context: ScriptContext,
) -> Result<ExecutionResult> {
    let mut executor = ScriptExecutor::new(context);
    executor.execute(program).await
}

/// 解析并执行脚本（便捷函数）
pub async fn run_script(
    input: &str,
    context: ScriptContext,
) -> Result<ExecutionResult> {
    let program = parse_script(input)?;
    execute_script(program, context).await
}
